home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / JViewport.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  14.1 KB  |  703 lines

  1. package javax.swing;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.Insets;
  10. import java.awt.LayoutManager;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.Window;
  14. import java.awt.event.ComponentListener;
  15. import java.awt.image.ImageObserver;
  16. import javax.accessibility.Accessible;
  17. import javax.accessibility.AccessibleContext;
  18. import javax.swing.border.Border;
  19. import javax.swing.event.ChangeEvent;
  20. import javax.swing.event.ChangeListener;
  21.  
  22. public class JViewport extends JComponent implements Accessible {
  23.    static final Object EnableWindowBlit = "EnableWindowBlit";
  24.    protected boolean isViewSizeSet = false;
  25.    protected Point lastPaintPosition = null;
  26.    protected boolean backingStore = false;
  27.    protected transient Image backingStoreImage = null;
  28.    protected boolean scrollUnderway = false;
  29.    private ComponentListener viewListener = null;
  30.    private transient ChangeEvent changeEvent = null;
  31.    private transient boolean windowBlit;
  32.    private transient boolean repaintAll;
  33.    private transient boolean waitingForRepaint;
  34.    private transient Timer repaintTimer;
  35.    // $FF: synthetic field
  36.    static Class class$javax$swing$event$ChangeListener;
  37.  
  38.    public JViewport() {
  39.       ((Container)this).setLayout(this.createLayoutManager());
  40.    }
  41.  
  42.    // $FF: synthetic method
  43.    static boolean access$0(JViewport var0) {
  44.       return var0.waitingForRepaint;
  45.    }
  46.  
  47.    public void addChangeListener(ChangeListener var1) {
  48.       super.listenerList.add(class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")), var1);
  49.    }
  50.  
  51.    protected void addImpl(Component var1, Object var2, int var3) {
  52.       this.setView(var1);
  53.    }
  54.  
  55.    private void blitWindowGraphics(int var1, int var2, int var3, int var4, int var5, int var6) {
  56.       Container var7;
  57.       for(var7 = ((Component)this).getParent(); !(var7 instanceof Window); var7 = ((Component)var7).getParent()) {
  58.       }
  59.  
  60.       Graphics var8 = ((Component)var7).getGraphics();
  61.       Rectangle var9 = new Rectangle(var1, var2, var3, var4);
  62.       var9 = SwingUtilities.convertRectangle(this, var9, var7);
  63.       var8.copyArea(var9.x, var9.y, var9.width, var9.height, var5, var6);
  64.    }
  65.  
  66.    private boolean canUseWindowBlitter() {
  67.       if (!(((Component)this).getParent() instanceof JComponent) && !(this.getView() instanceof JComponent)) {
  68.          return false;
  69.       } else {
  70.          Rectangle var1 = new Rectangle(0, 0, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  71.          Rectangle var2 = new Rectangle();
  72.          Object var6 = null;
  73.  
  74.          Object var5;
  75.          for(var5 = this; !(var5 instanceof Window) && var5 != null; var5 = ((Component)var5).getParent()) {
  76.             Rectangle var4;
  77.             if (var5 instanceof JComponent) {
  78.                var4 = ((JComponent)var5)._bounds;
  79.             } else {
  80.                var4 = ((Component)var5).getBounds();
  81.             }
  82.  
  83.             var2.setBounds(var1);
  84.             SwingUtilities.computeIntersection(0, 0, var4.width, var4.height, var1);
  85.             if (!var1.equals(var2)) {
  86.                return false;
  87.             }
  88.  
  89.             if (var6 != null && var5 instanceof JComponent && !((JComponent)var5).isOptimizedDrawingEnabled()) {
  90.                Component[] var7 = ((Container)var5).getComponents();
  91.                int var8 = 0;
  92.  
  93.                for(int var9 = var7.length - 1; var9 >= 0; --var9) {
  94.                   if (var7[var9] == var6) {
  95.                      var8 = var9 - 1;
  96.                      break;
  97.                   }
  98.                }
  99.  
  100.                while(var8 >= 0) {
  101.                   Rectangle var3;
  102.                   if (var7[var8] instanceof JComponent) {
  103.                      var3 = ((JComponent)var7[var8])._bounds;
  104.                   } else {
  105.                      var3 = var7[var8].getBounds();
  106.                   }
  107.  
  108.                   if (var3.intersects(var1)) {
  109.                      return false;
  110.                   }
  111.  
  112.                   --var8;
  113.                }
  114.             }
  115.  
  116.             var1.x += var4.x;
  117.             var1.y += var4.y;
  118.             var6 = var5;
  119.          }
  120.  
  121.          return var5 != null;
  122.       }
  123.    }
  124.  
  125.    // $FF: synthetic method
  126.    static Class class$(String var0) {
  127.       try {
  128.          return Class.forName(var0);
  129.       } catch (ClassNotFoundException var2) {
  130.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  131.       }
  132.    }
  133.  
  134.    protected boolean computeBlit(int var1, int var2, Point var3, Point var4, Dimension var5, Rectangle var6) {
  135.       int var7 = Math.abs(var1);
  136.       int var8 = Math.abs(var2);
  137.       Dimension var9 = this.getExtentSize();
  138.       if (var1 == 0 && var2 != 0 && var8 < var9.height) {
  139.          if (var2 < 0) {
  140.             var3.y = -var2;
  141.             var4.y = 0;
  142.             var6.y = var9.height + var2;
  143.          } else {
  144.             var3.y = 0;
  145.             var4.y = var2;
  146.             var6.y = 0;
  147.          }
  148.  
  149.          var6.x = var3.x = var4.x = 0;
  150.          var5.width = var9.width;
  151.          var5.height = var9.height - var8;
  152.          var6.width = var9.width;
  153.          var6.height = var8;
  154.          return true;
  155.       } else if (var2 == 0 && var1 != 0 && var7 < var9.width) {
  156.          if (var1 < 0) {
  157.             var3.x = -var1;
  158.             var4.x = 0;
  159.             var6.x = var9.width + var1;
  160.          } else {
  161.             var3.x = 0;
  162.             var4.x = var1;
  163.             var6.x = 0;
  164.          }
  165.  
  166.          var6.y = var3.y = var4.y = 0;
  167.          var5.width = var9.width - var7;
  168.          var5.height = var9.height;
  169.          var6.y = 0;
  170.          var6.width = var7;
  171.          var6.height = var9.height;
  172.          return true;
  173.       } else {
  174.          return false;
  175.       }
  176.    }
  177.  
  178.    protected LayoutManager createLayoutManager() {
  179.       return new ViewportLayout();
  180.    }
  181.  
  182.    private Timer createRepaintTimer() {
  183.       Timer var1 = new Timer(300, new 1(this));
  184.       var1.setRepeats(false);
  185.       return var1;
  186.    }
  187.  
  188.    protected ViewListener createViewListener() {
  189.       return new ViewListener(this);
  190.    }
  191.  
  192.    protected void firePropertyChange(String var1, Object var2, Object var3) {
  193.       super.firePropertyChange(var1, var2, var3);
  194.       if (var1.equals("EnableWindowBlit")) {
  195.          this.windowBlit = var3 != null;
  196.       }
  197.  
  198.    }
  199.  
  200.    protected void fireStateChanged() {
  201.       Object[] var1 = super.listenerList.getListenerList();
  202.  
  203.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  204.          if (var1[var2] == (class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")))) {
  205.             if (this.changeEvent == null) {
  206.                this.changeEvent = new ChangeEvent(this);
  207.             }
  208.  
  209.             ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
  210.          }
  211.       }
  212.  
  213.    }
  214.  
  215.    private void flushViewDirtyRegion(Graphics var1) {
  216.       RepaintManager var2 = RepaintManager.currentManager(this);
  217.       JComponent var3 = (JComponent)this.getView();
  218.       Rectangle var4 = var2.getDirtyRegion((JComponent)this.getView());
  219.       if (var4 != null && var4.width > 0 && var4.height > 0) {
  220.          var4.x += var3.getX();
  221.          var4.y += var3.getY();
  222.          Rectangle var5 = var1.getClipBounds();
  223.          if (var5 == null) {
  224.             var1.setClip(0, 0, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  225.          }
  226.  
  227.          var1.clipRect(var4.x, var4.y, var4.width, var4.height);
  228.          this.paintView(var1);
  229.       }
  230.  
  231.    }
  232.  
  233.    public AccessibleContext getAccessibleContext() {
  234.       if (super.accessibleContext == null) {
  235.          super.accessibleContext = new AccessibleJViewport(this);
  236.       }
  237.  
  238.       return super.accessibleContext;
  239.    }
  240.  
  241.    private Graphics getBackingStoreGraphics(Graphics var1) {
  242.       Graphics var2 = this.backingStoreImage.getGraphics();
  243.       var2.setColor(var1.getColor());
  244.       var2.setFont(var1.getFont());
  245.       var2.setClip(var1.getClipBounds());
  246.       return var2;
  247.    }
  248.  
  249.    public Dimension getExtentSize() {
  250.       return ((Component)this).getSize();
  251.    }
  252.  
  253.    public final Insets getInsets() {
  254.       return new Insets(0, 0, 0, 0);
  255.    }
  256.  
  257.    public final Insets getInsets(Insets var1) {
  258.       var1.left = var1.top = var1.right = var1.bottom = 0;
  259.       return var1;
  260.    }
  261.  
  262.    public Component getView() {
  263.       return ((Container)this).getComponentCount() > 0 ? ((Container)this).getComponent(0) : null;
  264.    }
  265.  
  266.    private Point getViewLocation() {
  267.       Component var1 = this.getView();
  268.       return var1 != null ? var1.getLocation() : new Point(0, 0);
  269.    }
  270.  
  271.    public Point getViewPosition() {
  272.       Component var1 = this.getView();
  273.       if (var1 != null) {
  274.          Point var2 = var1.getLocation();
  275.          var2.x = -var2.x;
  276.          var2.y = -var2.y;
  277.          return var2;
  278.       } else {
  279.          return new Point(0, 0);
  280.       }
  281.    }
  282.  
  283.    public Rectangle getViewRect() {
  284.       return new Rectangle(this.getViewPosition(), this.getExtentSize());
  285.    }
  286.  
  287.    public Dimension getViewSize() {
  288.       Component var1 = this.getView();
  289.       if (var1 == null) {
  290.          return new Dimension(0, 0);
  291.       } else {
  292.          return this.isViewSizeSet ? var1.getSize() : var1.getPreferredSize();
  293.       }
  294.    }
  295.  
  296.    public boolean isBackingStoreEnabled() {
  297.       return this.backingStore;
  298.    }
  299.  
  300.    public boolean isOptimizedDrawingEnabled() {
  301.       return false;
  302.    }
  303.  
  304.    public void paint(Graphics var1) {
  305.       int var2 = ((JComponent)this).getWidth();
  306.       int var3 = ((JComponent)this).getHeight();
  307.       if (var2 > 0 && var3 > 0) {
  308.          if (this.repaintAll) {
  309.             this.repaintAll = false;
  310.             Rectangle var4 = var1.getClipBounds();
  311.             if (var4.width >= ((JComponent)this).getWidth() && var4.height >= ((JComponent)this).getHeight()) {
  312.                if (this.repaintTimer != null) {
  313.                   this.repaintTimer.stop();
  314.                }
  315.  
  316.                this.waitingForRepaint = false;
  317.             } else {
  318.                this.waitingForRepaint = true;
  319.                if (this.repaintTimer == null) {
  320.                   this.repaintTimer = this.createRepaintTimer();
  321.                }
  322.  
  323.                this.repaintTimer.stop();
  324.                this.repaintTimer.start();
  325.             }
  326.          } else if (this.waitingForRepaint) {
  327.             Rectangle var18 = var1.getClipBounds();
  328.             if (var18.width >= ((JComponent)this).getWidth() && var18.height >= ((JComponent)this).getHeight()) {
  329.                this.waitingForRepaint = false;
  330.                this.repaintTimer.stop();
  331.             }
  332.          }
  333.  
  334.          if (this.backingStore && !this.windowBlit) {
  335.             Rectangle var19 = this.getView().getBounds();
  336.             var1.clipRect(0, 0, var19.width, var19.height);
  337.             if (this.backingStoreImage == null) {
  338.                this.backingStoreImage = ((Component)this).createImage(var2, var3);
  339.                Rectangle var5 = var1.getClipBounds();
  340.                if (var5.width == var2 && var5.height == var3) {
  341.                   this.paintViaBackingStore(var1);
  342.                } else {
  343.                   var1.setClip(0, 0, Math.min(var19.width, var2), Math.min(var19.height, var3));
  344.                   this.paintViaBackingStore(var1, var5);
  345.                }
  346.             } else if (this.scrollUnderway && !this.lastPaintPosition.equals(this.getViewLocation())) {
  347.                Point var20 = new Point();
  348.                Point var6 = new Point();
  349.                Dimension var7 = new Dimension();
  350.                Rectangle var8 = new Rectangle();
  351.                Point var9 = this.getViewLocation();
  352.                int var10 = var9.x - this.lastPaintPosition.x;
  353.                int var11 = var9.y - this.lastPaintPosition.y;
  354.                boolean var12 = this.computeBlit(var10, var11, var20, var6, var7, var8);
  355.                if (!var12) {
  356.                   this.paintViaBackingStore(var1);
  357.                } else {
  358.                   int var13 = var6.x - var20.x;
  359.                   int var14 = var6.y - var20.y;
  360.                   Rectangle var15 = var1.getClipBounds();
  361.                   var1.setClip(0, 0, var2, var3);
  362.                   Graphics var16 = this.getBackingStoreGraphics(var1);
  363.                   var16.copyArea(var20.x, var20.y, var7.width, var7.height, var13, var14);
  364.                   var1.setClip(var15.x, var15.y, var15.width, var15.height);
  365.                   Rectangle var17 = var19.intersection(var8);
  366.                   var16.setClip(var17);
  367.                   super.paint(var16);
  368.                   var1.drawImage(this.backingStoreImage, 0, 0, this);
  369.                }
  370.             } else {
  371.                this.paintViaBackingStore(var1);
  372.             }
  373.  
  374.             this.lastPaintPosition = this.getViewLocation();
  375.             this.scrollUnderway = false;
  376.          } else {
  377.             super.paint(var1);
  378.             this.lastPaintPosition = this.getViewLocation();
  379.          }
  380.       }
  381.    }
  382.  
  383.    private void paintViaBackingStore(Graphics var1) {
  384.       Graphics var2 = this.getBackingStoreGraphics(var1);
  385.       super.paint(var2);
  386.       var1.drawImage(this.backingStoreImage, 0, 0, this);
  387.    }
  388.  
  389.    private void paintViaBackingStore(Graphics var1, Rectangle var2) {
  390.       Graphics var3 = this.getBackingStoreGraphics(var1);
  391.       super.paint(var3);
  392.       var1.setClip(var2);
  393.       var1.drawImage(this.backingStoreImage, 0, 0, this);
  394.    }
  395.  
  396.    private void paintView(Graphics var1) {
  397.       Rectangle var2 = var1.getClipBounds();
  398.       RepaintManager var3 = RepaintManager.currentManager(this);
  399.       boolean var4 = var3.isDoubleBufferingEnabled();
  400.       JComponent var5 = (JComponent)this.getView();
  401.       var2.x -= var5.getX();
  402.       var2.y -= var5.getY();
  403.       Image var6 = var3.getOffscreenBuffer(this, var2.width, var2.height);
  404.       Graphics var7 = var6.getGraphics();
  405.       var7.translate(-var2.x, -var2.y);
  406.       var7.setClip(var2.x, var2.y, var2.width, var2.height);
  407.       var3.setDoubleBufferingEnabled(false);
  408.       var5.paint(var7);
  409.       if (var4) {
  410.          var3.setDoubleBufferingEnabled(true);
  411.       }
  412.  
  413.       var1.drawImage(var6, var2.x + var5.getX(), var2.y + var5.getY(), (ImageObserver)null);
  414.       var7.dispose();
  415.    }
  416.  
  417.    protected String paramString() {
  418.       String var1 = this.isViewSizeSet ? "true" : "false";
  419.       String var2 = this.lastPaintPosition != null ? this.lastPaintPosition.toString() : "";
  420.       String var3 = this.backingStore ? "true" : "false";
  421.       String var4 = this.backingStoreImage != null ? this.backingStoreImage.toString() : "";
  422.       String var5 = this.scrollUnderway ? "true" : "false";
  423.       return super.paramString() + ",backingStore=" + var3 + ",backingStoreImage=" + var4 + ",isViewSizeSet=" + var1 + ",lastPaintPosition=" + var2 + ",scrollUnderway=" + var5;
  424.    }
  425.  
  426.    private int positionAdjustment(int var1, int var2, int var3) {
  427.       if (var3 >= 0 && var2 + var3 <= var1) {
  428.          return 0;
  429.       } else if (var3 <= 0 && var2 + var3 >= var1) {
  430.          return 0;
  431.       } else if (var3 > 0 && var2 <= var1) {
  432.          return -var3 + var1 - var2;
  433.       } else if (var3 >= 0 && var2 >= var1) {
  434.          return -var3;
  435.       } else if (var3 <= 0 && var2 <= var1) {
  436.          return -var3;
  437.       } else {
  438.          return var3 < 0 && var2 >= var1 ? -var3 + var1 - var2 : 0;
  439.       }
  440.    }
  441.  
  442.    public void remove(Component var1) {
  443.       var1.removeComponentListener(this.viewListener);
  444.       super.remove(var1);
  445.    }
  446.  
  447.    public void removeChangeListener(ChangeListener var1) {
  448.       super.listenerList.remove(class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")), var1);
  449.    }
  450.  
  451.    public void repaint(long var1, int var3, int var4, int var5, int var6) {
  452.       Container var7 = ((Component)this).getParent();
  453.       if (var7 != null) {
  454.          ((Component)var7).repaint(var1, var3 + ((JComponent)this).getX(), var4 + ((JComponent)this).getY(), var5, var6);
  455.       } else {
  456.          super.repaint(var1, var3, var4, var5, var6);
  457.       }
  458.  
  459.    }
  460.  
  461.    public void reshape(int var1, int var2, int var3, int var4) {
  462.       boolean var5 = ((JComponent)this).getWidth() != var3 || ((JComponent)this).getHeight() != var4;
  463.       if (var5) {
  464.          this.backingStoreImage = null;
  465.       }
  466.  
  467.       super.reshape(var1, var2, var3, var4);
  468.       if (var5) {
  469.          this.fireStateChanged();
  470.       }
  471.  
  472.    }
  473.  
  474.    public void scrollRectToVisible(Rectangle var1) {
  475.       Component var2 = this.getView();
  476.       if (var2 != null) {
  477.          if (!var2.isValid()) {
  478.             this.validateView();
  479.          }
  480.  
  481.          int var3 = 0;
  482.          int var4 = 0;
  483.          Rectangle var5 = ((Component)this).getBounds();
  484.          var3 = this.positionAdjustment(var5.width, var1.width, var1.x);
  485.          var4 = this.positionAdjustment(var5.height, var1.height, var1.y);
  486.          if (var3 != 0 || var4 != 0) {
  487.             Point var6 = this.getViewPosition();
  488.             this.setViewPosition(new Point(var6.x - var3, var6.y - var4));
  489.             this.scrollUnderway = false;
  490.          }
  491.  
  492.       }
  493.    }
  494.  
  495.    public void setBackingStoreEnabled(boolean var1) {
  496.       this.backingStore = var1;
  497.    }
  498.  
  499.    public final void setBorder(Border var1) {
  500.       if (var1 != null) {
  501.          throw new IllegalArgumentException("JViewport.setBorder() not supported");
  502.       }
  503.    }
  504.  
  505.    public void setExtentSize(Dimension var1) {
  506.       Dimension var2 = this.getExtentSize();
  507.       if (!var1.equals(var2)) {
  508.          ((Component)this).setSize(var1);
  509.          this.fireStateChanged();
  510.       }
  511.  
  512.    }
  513.  
  514.    public void setView(Component var1) {
  515.       int var2 = ((Container)this).getComponentCount();
  516.  
  517.       for(int var3 = var2 - 1; var3 >= 0; --var3) {
  518.          ((Container)this).remove(var3);
  519.       }
  520.  
  521.       this.isViewSizeSet = false;
  522.       if (var1 != null) {
  523.          super.addImpl(var1, (Object)null, -1);
  524.          this.viewListener = this.createViewListener();
  525.          var1.addComponentListener(this.viewListener);
  526.       }
  527.  
  528.       ((JComponent)this).revalidate();
  529.       ((Component)this).repaint();
  530.    }
  531.  
  532.    public void setViewPosition(Point var1) {
  533.       Component var2 = this.getView();
  534.       if (var2 != null) {
  535.          int var5 = var1.x;
  536.          int var6 = var1.y;
  537.          int var3;
  538.          int var4;
  539.          if (var2 instanceof JComponent) {
  540.             JComponent var7 = (JComponent)var2;
  541.             var3 = var7.getX();
  542.             var4 = var7.getY();
  543.          } else {
  544.             Rectangle var11 = var2.getBounds();
  545.             var3 = var11.x;
  546.             var4 = var11.y;
  547.          }
  548.  
  549.          int var12 = -var5;
  550.          int var8 = -var6;
  551.          if (var3 != var12 || var4 != var8) {
  552.             if (!this.waitingForRepaint && this.windowBlit && this.canUseWindowBlitter()) {
  553.                Graphics var9 = ((JComponent)this).getGraphics();
  554.                this.flushViewDirtyRegion(var9);
  555.                var2.setLocation(var12, var8);
  556.                var9.clipRect(0, 0, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  557.                this.repaintAll = this.windowBlitPaint(var9);
  558.                var9.dispose();
  559.                RepaintManager var10 = RepaintManager.currentManager(this);
  560.                var10.markCompletelyClean((JComponent)((Component)this).getParent());
  561.                var10.markCompletelyClean(this);
  562.                var10.markCompletelyClean((JComponent)var2);
  563.             } else {
  564.                this.scrollUnderway = true;
  565.                var2.setLocation(var12, var8);
  566.             }
  567.  
  568.             this.fireStateChanged();
  569.          }
  570.  
  571.       }
  572.    }
  573.  
  574.    public void setViewSize(Dimension var1) {
  575.       Component var2 = this.getView();
  576.       if (var2 != null) {
  577.          Dimension var3 = var2.getSize();
  578.          if (!var1.equals(var3)) {
  579.             this.scrollUnderway = false;
  580.             var2.setSize(var1);
  581.             this.isViewSizeSet = true;
  582.             this.fireStateChanged();
  583.          }
  584.       }
  585.  
  586.    }
  587.  
  588.    public Dimension toViewCoordinates(Dimension var1) {
  589.       return new Dimension(var1);
  590.    }
  591.  
  592.    public Point toViewCoordinates(Point var1) {
  593.       return new Point(var1);
  594.    }
  595.  
  596.    private void validateView() {
  597.       Object var1 = null;
  598.       Object var2 = this;
  599.  
  600.       while(true) {
  601.          if (var2 != null) {
  602.             if (var2 instanceof CellRendererPane || ((Component)var2).getPeer() == null) {
  603.                return;
  604.             }
  605.  
  606.             if (!(var2 instanceof JComponent) || !((JComponent)var2).isValidateRoot()) {
  607.                var2 = ((Component)var2).getParent();
  608.                continue;
  609.             }
  610.  
  611.             var1 = var2;
  612.          }
  613.  
  614.          if (var1 == null) {
  615.             return;
  616.          }
  617.  
  618.          Object var3 = null;
  619.          Object var4 = var1;
  620.  
  621.          while(true) {
  622.             if (var4 != null) {
  623.                if (!((Component)var4).isVisible() || ((Component)var4).getPeer() == null) {
  624.                   return;
  625.                }
  626.  
  627.                if (!(var4 instanceof Window) && !(var4 instanceof Applet)) {
  628.                   var4 = ((Component)var4).getParent();
  629.                   continue;
  630.                }
  631.  
  632.                var3 = var4;
  633.             }
  634.  
  635.             if (var3 == null) {
  636.                return;
  637.             }
  638.  
  639.             ((Component)var1).validate();
  640.             RepaintManager var5 = RepaintManager.currentManager(this);
  641.             if (var5 != null) {
  642.                var5.removeInvalidComponent((JComponent)var1);
  643.             }
  644.  
  645.             return;
  646.          }
  647.       }
  648.    }
  649.  
  650.    private boolean windowBlitPaint(Graphics var1) {
  651.       int var2 = ((JComponent)this).getWidth();
  652.       int var3 = ((JComponent)this).getHeight();
  653.       if (var2 != 0 && var3 != 0) {
  654.          RepaintManager var5 = RepaintManager.currentManager(this);
  655.          JComponent var6 = (JComponent)this.getView();
  656.          boolean var4;
  657.          if (this.lastPaintPosition != null && !this.lastPaintPosition.equals(this.getViewLocation())) {
  658.             Point var7 = new Point();
  659.             Point var8 = new Point();
  660.             Dimension var9 = new Dimension();
  661.             Rectangle var10 = new Rectangle();
  662.             Point var11 = this.getViewLocation();
  663.             int var12 = var11.x - this.lastPaintPosition.x;
  664.             int var13 = var11.y - this.lastPaintPosition.y;
  665.             boolean var14 = this.computeBlit(var12, var13, var7, var8, var9, var10);
  666.             if (!var14) {
  667.                this.paintView(var1);
  668.                var4 = false;
  669.             } else {
  670.                boolean var15 = var5.isDoubleBufferingEnabled();
  671.                int var16 = var8.x - var7.x;
  672.                int var17 = var8.y - var7.y;
  673.                Rectangle var18 = ((Component)var6).getBounds().intersection(var10);
  674.                var18.x -= var6.getX();
  675.                var18.y -= var6.getY();
  676.                Image var19 = var5.getOffscreenBuffer(this, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  677.                Graphics var20 = var19.getGraphics();
  678.                var20.translate(-var18.x, -var18.y);
  679.                var20.setClip(var18.x, var18.y, var18.width, var18.height);
  680.                var5.setDoubleBufferingEnabled(false);
  681.                var6.paint(var20);
  682.                var5.setDoubleBufferingEnabled(var15);
  683.                this.blitWindowGraphics(var7.x, var7.y, var9.width, var9.height, var16, var17);
  684.                var18.x += var6.getX();
  685.                var18.y += var6.getY();
  686.                var1.setClip(var18.x, var18.y, var18.width, var18.height);
  687.                var1.drawImage(var19, var18.x, var18.y, (ImageObserver)null);
  688.                var20.dispose();
  689.                var4 = true;
  690.             }
  691.          } else {
  692.             this.paintView(var1);
  693.             var4 = false;
  694.          }
  695.  
  696.          this.lastPaintPosition = this.getViewLocation();
  697.          return var4;
  698.       } else {
  699.          return false;
  700.       }
  701.    }
  702. }
  703.